<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
namespace Agp\CoreBundle\Manager;

use Agp\CoreBundle\Manager\BaseManager;
use Agp\CoreBundle\Entity\ItemVendaAgape;
use Agp\CoreBundle\Entity\VendaAgape;
use Agp\CoreBundle\Entity\CobrancaContrato;

/**
 * Description of VendaAgapeManager
 *
 * @author bondcs
 */
class VendaAgapeManager extends BaseManager{

    public function sessionToObject($entity)
    {
        $itens = $this->container->get("session")->get('itens');
        foreach ($itens as $item){
            $produto = $this->container->get('agp.produtoAgape.manager')->findById($item['codProdutoAgape']);
            $itemVendaAgape = new ItemVendaAgape;
            $itemVendaAgape->setProduto($produto);
            $itemVendaAgape->setQtdItem($item['qtdItem']);
            $itemVendaAgape->getProduto()->retirarQtde($item['qtdItem']);
            $itemVendaAgape->setVenda($entity);
            $itemVendaAgape->setVlrItemByPass($item['vlrItem']);

            $entity->addItem($itemVendaAgape);
        }
        
    }
    
    public function geraNovaCobranca($entity, $dtVencimento, $contrato, $cobranca, $intervalo){
        $cobrancaManager = $this->container->get('agp.cobrancaContrato.manager');
        $cobranca = new CobrancaContrato;
        $cobranca->setContrato($contrato);
        $cobranca->setDtVencimento($dtVencimento);
        $cobranca->setVlrParcela(0);
        $cobranca->setTipo(CobrancaContrato::TP_VENDA);
        $cobranca->setDtReferencia($cobranca->getDtVencimento());
        $cobrancaManager->gerarBoleto($cobranca);
        $entity->setCobrancaContrato($cobranca);
    }

    public function persist($entity){
        
        $this->sessionToObject($entity);
        parent::persist($entity);
    }
    
    
    public function update($entity)
    {
        foreach($entity->getItens() as $item){
            $item->voltaEstoque();
            $this->em->merge($item->getProduto());
            $this->em->flush();
        }
        
        $entity->getItens()->clear();
        $this->sessionToObject($entity);
        parent::update($entity);
    }
    
    public function remove($entity) {
        
        foreach($entity->getItens() as $item){
            $item->voltaEstoque();
            $this->em->merge($item->getProduto());
            $this->em->flush();
        }
        
        parent::remove($entity);
    }

        public function updateSituacao($entity)
    { 
        if ($entity->isAtivo()){
            
            foreach ($entity->getItens() as $item){
                $item->voltaEstoque();
                $this->em->merge($item);
            }
            
            $entity->setSituacao(VendaAgape::SIT_CANCELADO);
            
        }elseif ($entity->isCancelado()){
            
            $flag = true;
            foreach ($entity->getItens() as $item){
                if ($item->retiraEstoque() == 'invalid'){
                    $flag = false;
                }
            }
            
            if (!$flag){
                return false;
            }

            $entity->setSituacao(VendaAgape::SIT_ATIVO);
        }
        
        $this->em->persist($entity);
        $this->flush();
        
        return true;
        
    }
}

?>
